#include "isr.h"
#include "idt.h"
#include "i386.h"
#include "klib.h"

#define EXTERN(numero) \
	extern void _isr ## numero();

EXTERN(1);
EXTERN(2);
EXTERN(3);
EXTERN(4);
EXTERN(5);
EXTERN(6);
EXTERN(7);
EXTERN(8);
EXTERN(9);
EXTERN(10);
EXTERN(11);
EXTERN(12);
EXTERN(13);
EXTERN(14);
EXTERN(15);
EXTERN(16);
EXTERN(17);
EXTERN(18);
EXTERN(19);
EXTERN(32);
EXTERN(33);
EXTERN(88);
EXTERN(89);

#define IDT_ENTRY(numero) \
	idt[numero].offset_0_15 = (unsigned short) ((unsigned int)(&_isr ## numero) & (unsigned int) 0xFFFF); \
	idt[numero].segsel = (unsigned short) 0x0008; \
	idt[numero].attr = (unsigned short) 0x8E00; \
	idt[numero].offset_16_31 = (unsigned short) ((unsigned int)(&_isr ## numero) >> 16 & (unsigned int) 0xFFFF);



	
void inicializar_idt() {
	IDT_ENTRY(0);
	IDT_ENTRY(1);
	IDT_ENTRY(2);
	IDT_ENTRY(3);	
	IDT_ENTRY(4);
	IDT_ENTRY(5);
	IDT_ENTRY(6);
	IDT_ENTRY(7);
	IDT_ENTRY(8);
	IDT_ENTRY(9);
	IDT_ENTRY(10);
	IDT_ENTRY(11);
	IDT_ENTRY(12);
	IDT_ENTRY(13);
	IDT_ENTRY(14);
	IDT_ENTRY(15);
	IDT_ENTRY(16);
	IDT_ENTRY(17);
	IDT_ENTRY(18);
	IDT_ENTRY(19);
	IDT_ENTRY(32);
	IDT_ENTRY(33);
	IDT_ENTRY(88);
	IDT_ENTRY(89);
	
	idt[88].attr = (unsigned short) 0xEE00;
	idt[89].attr = (unsigned short) 0xEE00;
	
	
}

idt_entry idt[255] = {};

idt_descriptor IDT_DESC = {sizeof(idt)-1, (unsigned int)&idt};
